/**
 * 有效数字（按顺序）可以分成以下几个部分：
 * (1)一个小数或者整数
 * (2)（可选）一个'e'或'E',后面跟着一个整数
 * 
 * 小数（按顺序）可以分成以下几个部分：
 * (1)（可选）一个符号字符（'+' 或 '-'）
 * (2)下述格式之一：
 *  ①至少一位数字，后面跟着一个点 '.'
 *  ②至少一位数字，后面跟着一个点 '.' ，后面再跟着至少一位数字
 *  ③一个点 '.' ，后面跟着至少一位数字
 * 
 * 整数（按顺序）可以分成以下几个部分：
 * (1)（可选）一个符号字符（'+' 或 '-'）
 * (2)至少一位数字
 * 
 * 给你一个字符串s ，如果s是一个 有效数字,请返回 true 。
 **/
#include<iostream>
#include<regex>
using namespace std;

/**
 * Solution 1:有穷自动机
 **/
class Solution {
public:
    bool isNumber(string s) {

    }
};

/**
 * Solution 2:正则表达式
 **/
class Solution_2 {
public:
    bool isNumber(string s) {
        // "([+-]?(\\d+(\\.\\d*)?|(\\.\\d+)))([eE][+-]?\\d+)?"
        regex r("[+-]?((\\d+(\\d.\\d*)?)|(\\.\\d+))([Ee][+-]?\\d+)?");
        bool result = regex_match(s, r);

        return result;
    }
};